//
//  CZEmoticonCell.swift
//  表情键盘
//
//  Created by ffxk007 on 2017/7/11.
//  Copyright © 2017年 ffxk007. All rights reserved.
//

import UIKit
///表情cell的协议
@objc protocol CZEmoticonCellDelegate:NSObjectProtocol {
    /// 表情cell选中表情模型
    ///
    /// - Parameter em: 表情模型/nil表示删除
    func emoticonCellDidSelectedEmoticon(cell:CZEmoticonCell,em:CZEmoticon?)
}

/// 表情的页面cell
/// 每一个cell就是和collectionview一样大小
/// 每一个cell中用九宫格的算法，自行添加20个表情
/// 最后一个位置放置删除按钮
class CZEmoticonCell: UICollectionViewCell {
    
    /// 代理
    weak var delegate:CZEmoticonCellDelegate?
    
    /// 当前页面的表情模型数组，最多20个
    var emoticons:[CZEmoticon]? {
        didSet {
//            print("表情包的数量 \(String(describing: emoticons?.count))")
            //1.隐藏所有的按钮
            for v in contentView.subviews {
                v.isHidden = true
            }
            //显示删除按钮
            contentView.subviews.last?.isHidden = false
            //2.遍历表情模型数组，设置按钮图像
            for (i,em) in (emoticons ?? []).enumerated() {
                //1.取出按钮
                if let btn = contentView.subviews[i] as? UIButton {
                    //设置图像-如果图像为nil，会清空图像，避免复用
                    btn.setImage(em.image, for: [])
                    //设置emoji字符串,如果emoji为nil，会清空title,避免复用
                    btn.setTitle(em.emoji, for: [])
                    
                    btn.isHidden = false
                    
                }
            }
        }
    }

    
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    //MARK:-监听方法
    ///选中表情按钮
    @objc fileprivate func selectedEmoticonButton(button:UIButton) {
        //1.取tag 0~20 20对应的是删除按钮
        let tag = button.tag
        
        //2.根据tag判断是否是删除按钮，如果不是删除按钮，取得表情
        var em:CZEmoticon?
        if tag < (emoticons?.count)! {
            em = emoticons?[tag]
        }
        
        //3.em要么是选中的模型，如果为nil对应的是删除按钮
        delegate?.emoticonCellDidSelectedEmoticon(cell: self, em: em)
    }
    
}

// MARK: - 设置界面
fileprivate extension CZEmoticonCell {
    //从xib加载，bounds是xib中定义的大小，不是size的大小
    //从纯代码中创建，bounds就是布局属性中设置的itemsize
    func setupUI() {
        let rowCount = 3
        let colCount = 7
        
        //左右间距
        let leftMargin:CGFloat = 8
        //底部间距，为分页控件预留控件
        let bottomMargin:CGFloat = 16
        
        let w = (bounds.width - 2 * leftMargin) / CGFloat(colCount)
        let h = (bounds.height - bottomMargin) / CGFloat(rowCount)
        //连续创建21个按钮
        for i in 0..<21 {
            let row = i / colCount
            let col = i % colCount
            
            let btn = UIButton()
            
            //设置btn的大小
            let x = leftMargin + CGFloat(col) * w
            let y = CGFloat(row) * h
            
            btn.frame = CGRect(x: x, y: y, width: w, height: h)
            contentView.addSubview(btn)
            
            //设置按钮的字体大小 lineHeight基本上和图片的大小差不多
            btn.titleLabel?.font = UIFont.systemFont(ofSize: 32)
            
            //设置按钮的tag
            btn.tag = i
            //添加监听方法
            btn.addTarget(self, action: #selector(selectedEmoticonButton), for: .touchUpInside)
        }
        //取出末尾的删除按钮
        let removeBtn = contentView.subviews.last as! UIButton
        //设置图像
        let image = UIImage(named: "compose_emotion_delete_highlighted", in: CZEmoticonManager.shared.boundle, compatibleWith: nil)
        removeBtn.setImage(image, for: [])
        
    }
}
